package com.aitao.enums;

/**
 * 支持的行尾格式枚举
 *
 * @Company QAX
 * @Author : ai.tao
 * @Create : 2022/2/16 12:31
 */
public enum LineEnding {
    /**
     * 自动匹配行尾分隔符
     */
    AUTO(System.lineSeparator()),
    /**
     * 保留行尾,啥也不加
     */
    KEEP(null),
    /**
     * 换行
     */
    LF("\n"),
    /**
     * 回车+换行
     */
    CRLF("\r\n"),
    /**
     * 回车
     */
    CR("\r"),
    /**
     * 空格
     */
    SPACE(" "),
    /**
     * 空
     */
    EMPTY(""),
    /**
     * 不支持的格式
     */
    UNKNOWN(null);

    private final String chars;

    LineEnding(final String value) {
        this.chars = value;
    }

    public String getChars() {
        return chars;
    }

    /**
     * 获取文本中出现次数最多的行尾字符
     * 
     * @param text 文本内容 识别
     * @return {@link LineEnding} 获取出现次数最多的行尾字符,如果没有出现最多的行尾字符，则返回 null
     */
    public static LineEnding identify(String text) {
        int lfCount = 0, crCount = 0, crlfCount = 0;
        for (int i = 0; i < text.length(); i++) {
            char c = text.charAt(i);
            if (c == '\r') {
                if (i + 1 < text.length() && text.charAt(i + 1) == '\n') {
                    crlfCount++;
                    i++;
                } else {
                    crCount++;
                }
            } else if (c == '\n') {
                lfCount++;
            }
        }
        if (lfCount > crCount && lfCount > crlfCount) {
            return LF;
        }
        if (crlfCount > lfCount && crlfCount > crCount) {
            return CRLF;
        }
        if (crCount > lfCount && crCount > crlfCount) {
            return CR;
        }
        return UNKNOWN;
    }

    @Override
    public String toString() {
        return chars;
    }
}
